package com.chen;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class MovieService {
    private static final List<Movie> movies = new ArrayList<>();
    private final Scanner sc = new Scanner(System.in);

    public void start() {
        // 准备操作页面cmd
        while (true) {
            System.out.println("电影信息操作系统");
            System.out.println("1.上架电影");
            System.out.println("2.下架电影");
            System.out.println("3.查询电影");
            System.out.println("4.封杀电影");
            System.out.println("5.展示所有电影");
            System.out.println("6.修改电影");
            System.out.println("7.退出");
            System.out.println("请输入要操作的命令：");
            String command = sc.next();
            switch (command) {
                case "1":
                    // 上架电影
                    addMovie();
                    break;
                case "2":
                    // 下架电影
                    removeMovie();
                    break;
                case "3":
                    // 查询电影
                    queryMovie();
                    break;
                case "4":
                    // 封杀电影
                    deleteMovies();
                    break;
                case "5":
                    // 展示所有电影
                    showMovies();
                    break;
                case "6":
                    // 修改电影
                    updateMovie();
                    break;
                case "7":
                    System.out.println("退出成功！");
                    return;
                default:
                    System.out.println("输入的命令有误，请重新输入！");
            }
        }
    }

    /**
     * 修改电影
     */
    private void updateMovie() {
        System.out.println("=======修改电影========");
        // 要修改电影名称
        System.out.println("请输入要修改的电影名称：");
        String name = sc.next();
        updateMovieByName(name);

    }

    /**
     * 根据电影名称对电影进行修改
     * @param name 电影名称
     */
    private void updateMovieByName(String name) {
        for (Movie movie : movies) {
            if (movie.getName().equals(name)) {
                // 修改电影名称
                System.out.println("请输入修改后的电影名称：");
                String updateAfterName = sc.next();
                movie.setName(updateAfterName);
                // 修改电影主演
                System.out.println("请输入修改后的电影主演：");
                String updateAfterActor = sc.next();
                movie.setActor(updateAfterActor);
                // 修改电影价格
                System.out.println("请输入修改后的电影价格：");
                double updateAfterPrice = sc.nextDouble();
                movie.setPrice(updateAfterPrice);
                // 修改电影评分
                System.out.println("请输入修改后的电影评分：");
                double updateAfterScore = sc.nextDouble();
                movie.setScore(updateAfterScore);
                return;
            }
        }
    }

    /**
     * 展示所以电影信息
     */
    private void showMovies() {
        if (movies.isEmpty()) {
            System.out.println("当前系统没有电影，请添加！");
            return;
        }
        System.out.println("======展示所以电影信息=========");
        movies.forEach(System.out::println);
    }

    /**
     * 封杀电影
     */
    private void deleteMovies() {
        System.out.println("=======封杀电影========");
        // 获取要封杀明星的姓名
        System.out.println("请输入要封杀明星的姓名：");
        String name = sc.next();
        deleteMoviesBystar(name);
        System.out.println("封杀成功！");
    }

    /**
     * 根据明星姓名删除电影
     * @param name
     */
    private void deleteMoviesBystar(String name) {
        movies.removeIf(movie -> movie.getActor().contains(name));
    }

    /**
     * 下架电影
     */
    private void removeMovie() {
        System.out.println("=====下架电影======");
        // 获取要下架的电影名称
        System.out.println("请输入要下架的电影名称：");
        String name = sc.next();
        // 下架电影
        removeMovieByName(name);
        System.out.println("电影下架成功！");

    }

    /**
     * 根据电影名称下架电影
     * @param name 电影名称
     */
    private void removeMovieByName(String name) {
        movies.removeIf(movie -> movie.getName().equals(name));
    }

    /**
     * 上架电影
     */
    private void addMovie(){
        System.out.println("=====上架电影======");
        // 创建电影对象，封装电影信息
        Movie movie = new Movie();

        // 给电影对象注入数据
        System.out.println("请输入电影名称：");
        movie.setName(sc.next());
        System.out.println("请输入电影主演：");
        movie.setActor(sc.next());
        System.out.println("亲输入电影价格：");
        movie.setPrice(sc.nextDouble());
        System.out.println("请输入电影评分：");
        movie.setScore(sc.nextDouble());

        // 将电影对象加入集合
        movies.add(movie);
        System.out.println("上架成功！");
    }


    /**
     * 查询电影
     */
    private void queryMovie() {
        System.out.println("=====查询电影======");
        // 输入电影传媒
        System.out.println("请输入要查询的电影名称：");
        String name = sc.next();
        // 根据名称查询电影
        Movie movie = getMovieByName(name);
        if (movie != null) {
            System.out.println(movie);
        } else {
            System.out.println("没有找到这个电影");
        }
    }

    /**
     * 根据电影名称查询电影
     * @param name 电影名称
     * @return
     */
    private Movie getMovieByName(String name) {
        for (Movie movie : movies) {
            if (movie.getName().equals(name)) {
                return movie;
            }
        }
        return null;
    }
}
